package message

// MarkdownBody Markdown 消息体。
type MarkdownBody struct {
	Content             string   `json:"content"`              // 消息内容
	MentionedIdList     []string `json:"mentioned_list"`       // @成员 ID 列表
	MentionedMobileList []string `json:"mentioned_mobile_list"` // @手机号列表
}

// Markdown Markdown 消息。
type Markdown struct {
	Message
	MarkdownBody *MarkdownBody `json:"markdown"`
}

// NewMarkdown 创建一个新的 Markdown 消息实例。
func NewMarkdown() *Markdown {
	m := &Markdown{}
	m.SetType("markdown")
	return m
}

// SetContent 设置消息内容。
func (m *Markdown) SetContent(content string) *Markdown {
	if m.MarkdownBody == nil {
		m.setDefaultTextBody()
	}
	m.MarkdownBody.Content = content
	return m
}

// GetContent 获取消息内容。
func (m *Markdown) GetContent() string {
	if m.MarkdownBody == nil {
		return ""
	}
	return m.MarkdownBody.Content
}

// AppendLine 向 Markdown 消息内容追加一行。
func (m *Markdown) AppendLine(line string) {
	if m.MarkdownBody == nil {
		m.setDefaultTextBody()
	}
	if m.MarkdownBody.Content == "" {
		m.MarkdownBody.Content = line
	} else {
		m.MarkdownBody.Content += "\n" + line
	}
}

// setDefaultTextBody 设置默认消息体。
func (m *Markdown) setDefaultTextBody() *Markdown {
	m.MarkdownBody = &MarkdownBody{}
	return m
}

// SetMentionedIds 设置 @成员 ID 列表。
func (m *Markdown) SetMentionedIds(ids []string) *Markdown {
	if m.MarkdownBody == nil {
		m.setDefaultTextBody()
	}
	m.MarkdownBody.MentionedIdList = ids
	return m
}

// SetMentionedMobiles 设置 @手机号列表。
func (m *Markdown) SetMentionedMobiles(mobiles []string) *Markdown {
	if m.MarkdownBody == nil {
		m.setDefaultTextBody()
	}
	m.MarkdownBody.MentionedMobileList = mobiles
	return m
}
